import sun.awt.util.IdentityLinkedList;

import java.io.BufferedReader;
import java.util.ArrayList;
import java.util.List;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: 23735
 * Date: 2023-08-20
 * Time: 21:29
 */
public class Solution {

    /**
     *  方法一: 二维矩阵
     */
    public String convert1(String s, int numRows) {
        int len = s.length();
        if (len <= 1 || numRows <= 1) {
            return s;
        }
        List<StringBuilder> list = new ArrayList<>();
        for (int i = 0;i < numRows;i++) {
            list.add(new StringBuilder());
        }
        for (int i = 0;i < len;) {
            // 正向添加
            for (int j = 0; j < numRows && i < len; j++, i++) {
                list.get(j).append(s.charAt(i));
            }
            // 反向添加
            for (int j = numRows-2; j > 0 && i < len; j--, i++) {
                list.get(j).append(s.charAt(i));
            }
        }
        StringBuilder ans = new StringBuilder();
        for (StringBuilder sb : list) {
            ans.append(sb);
        }
        return ans.toString();
    }


    /**
     *  方法二: 使用二维矩阵, 但是加上了转向标志
     *  在第一行 或者 最后一行 进行转向
     */
    public String convert2(String s, int numRows) {
        int len = s.length();
        if (len <= 1 || numRows <= 1) {
            return s;
        }
        List<StringBuilder> list = new ArrayList<>();
        for (int i = 0; i < numRows; i++) {
            list.add(new StringBuilder());
        }
        // 转向标志
        int flag = -1;
        // 行下标
        int index = 0;
        for (int i = 0; i < len; i++) {
            list.get(index).append(s.charAt(i));
            // 在第一行 或者 最后一行 进行转向
            if (index == 0 || index == numRows-1) {
                flag = -flag;
            }
            index += flag;
        }
        StringBuilder ans = new StringBuilder();
        for (StringBuilder sb : list) {
            ans.append(sb);
        }
        return ans.toString();
    }
}
